﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ComunesMGI.DataTypes;
using ComunesMGI.Enum;
using System.Windows.Forms;

namespace ComunesMGI.Controles
{
    public class TablaCamposControl : TableLayoutPanel
    {
        private List<DataCampo> _campos;

        public List<DataCampo> getCampos()
        {
            for (int i = 0; i < _campos.Count; i++)
            {
                switch (_campos[i].Tipo)
                {
                    case CampoSharepoint.Boolean:
                        _campos[i].Valor = ((CheckBox)this.GetControlFromPosition(1, i)).Checked.ToString();
                        break;
                    case CampoSharepoint.DateTime:
                        _campos[i].Valor = ((DateTimePicker )this.GetControlFromPosition(1, i)).Value.ToString();
                        break;
                    case CampoSharepoint.Number:
                        _campos[i].Valor = ((TextBox )this.GetControlFromPosition(1, i)).Text;
                        break;
                    case CampoSharepoint.Text:
                        _campos[i].Valor = ((TextBox)this.GetControlFromPosition(1, i)).Text;
                        break;
                    case CampoSharepoint.Note:
                        _campos[i].Valor = ((TextBox)this.GetControlFromPosition(1, i)).Text;
                        break;
                    case CampoSharepoint.Choice:
                        _campos[i].Valor = ((ComboBox)this.GetControlFromPosition(1, i)).SelectedItem.ToString();
                        break;
                    default:
                        throw new NotImplementedException();
                }
            }
            return _campos;
        }

        public TablaCamposControl(List<DataCampo> campos)
        {
            _campos = campos;

            // Propiedades fijas
            this.AutoScroll = true;
            this.Dock = DockStyle.Fill;
            this.ColumnCount = 2;

            armarTablaControlesDinamicos();
        }

        private void armarTablaControlesDinamicos()
        {
            this.RowCount = _campos.Count;
            for (int rowNo = 0; rowNo < this.RowCount; rowNo++)
            {
                DataCampo dcActual = _campos[rowNo];

                // agrego la etiqueta
                Label etiqueta = new Label();
                etiqueta.Name = "lblEtiqueta" + rowNo;
                etiqueta.Text = dcActual.Titulo;
                this.Controls.Add(etiqueta, 0, rowNo);

                // agrego el control
                this.Controls.Add(crearControlCampo(dcActual, rowNo), 1, rowNo);
            }
        }

        private Control crearControlCampo(DataCampo dc, int numFila)
        {
            Control campo = null;

            switch (dc.Tipo)
            {
                case ComunesMGI.Enum.CampoSharepoint.Boolean:
                    campo = new CheckBox();
                    if (!string.IsNullOrEmpty(dc.Valor))
                    { 
                        ((CheckBox)campo).Checked = Boolean.Parse(dc.Valor);
                    }
                    break;

                case ComunesMGI.Enum.CampoSharepoint.DateTime:
                    campo = new DateTimePicker();
                    if (!string.IsNullOrEmpty(dc.Valor))
                    {
                        ((DateTimePicker)campo).Value = DateTime.Parse(dc.Valor);
                    }
                    break;

                case ComunesMGI.Enum.CampoSharepoint.Number:
                    campo = new TextBox();
                    if (!string.IsNullOrEmpty(dc.Valor))
                    {
                        ((TextBox)campo).Text = dc.Valor;
                    }

                    break;
                case ComunesMGI.Enum.CampoSharepoint.Text:
                    campo = new TextBox();
                    if (!string.IsNullOrEmpty(dc.Valor))
                    {
                        ((TextBox)campo).Text = dc.Valor;
                    }

                    break;
                case ComunesMGI.Enum.CampoSharepoint.Note:
                    campo = new TextBox();
                    if (!string.IsNullOrEmpty(dc.Valor))
                    {
                        ((TextBox)campo).Text = dc.Valor;
                    }

                    break;
                case ComunesMGI.Enum.CampoSharepoint.Choice:
                    campo = new ComboBox();
                    
                    // Agrego las opciones
                    foreach (string opcion in dc.Opciones)
                    {
                        ((ComboBox)campo).Items.Add(opcion);
                    }

                    if (!string.IsNullOrEmpty(dc.Valor))
                    {
                        ((ComboBox)campo).SelectedItem=dc.Valor;
                    }

                    break;
                
                default:
                    throw new NotImplementedException();

            }

            campo.Name = "ctrlCampo" + numFila;
            return campo;
        }
    }
}